package app.models;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

/**
 * @author Marcos V. Aguiar
 * @since 26/12/2013
 */

@Entity
@Table(name = "SUB_ESPECIALIDADE")
public class SubEspecialidade implements Pojo {
	
	private static final long serialVersionUID = -7664923009639813253L;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	private Long id;
	
	@NotNull(message = "O nome deve ser preenchido")
	@Column(name = "NOME", columnDefinition = "varchar(50)")
	private String nome;
	
	@NotNull(message = "A descrição deve ser preenchida")
	@Column(name = "DESCRICAO", columnDefinition = "varchar(150)")
	private String descricao;
	
//	@Min(value = 1, message = "O número de CH(s) deve ser preenchido")
	@Column(name = "NUMERO_CH", columnDefinition = "double")
	private Integer numeroCH;
	
	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "ID_CH", referencedColumnName = "ID", insertable = false, updatable = false)
	private CH ch;
	
	@Column(name = "ID_CH", columnDefinition = "integer")
	private Integer idCH;
	
	@Min(value = 0, message = "O valor deve ser preenchido")
	@Column(name = "VALOR", columnDefinition = "double")
	private Double valor;
	
//	@NotNull(message = "O número do CID deve ser preenchido")
	@Column(name = "CID", columnDefinition = "varchar(50)")
	private String cid;
	
	@NotNull(message = "O código de tratamento deve ser preenchido")
	@Column(name = "CODIGO_TRATAMENTO", columnDefinition = "varchar(50)")
	private String codigoTratamento;
	
	@NotNull(message = "O tipo de especialidade deve ser preenchido")
	@Column(name = "ID_ESPECIALIDADE", columnDefinition = "integer")
	private Integer idEspecialidade;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_ESPECIALIDADE", referencedColumnName = "ID", insertable = false, updatable = false)
	private Especialidade especialidade;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_CONVENIO", referencedColumnName = "ID", insertable = false, updatable = false)
	private Convenio convenio;
	
	@NotNull(message = "O convênio deve ser preenchido")
	@Column(name = "ID_CONVENIO", columnDefinition = "integer")
	private Integer idConvenio;
	
	
	public Long getId() {
		return id;
	}

	public Double getValor() {
		return valor;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public CH getCh() {
		return ch;
	}

	public void setCh(CH ch) {
		this.ch = ch;
	}

	public Integer getIdCH() {
		return idCH;
	}

	public void setIdCH(Integer idCH) {
		this.idCH = idCH;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Integer getNumeroCH() {
		return numeroCH;
	}

	public void setNumeroCH(Integer numeroCH) {
		this.numeroCH = numeroCH;
	}

	public String getCid() {
		return cid;
	}

	public void setCid(String cid) {
		this.cid = cid;
	}

	public String getCodigoTratamento() {
		return codigoTratamento;
	}

	public void setCodigoTratamento(String codigoTratamento) {
		this.codigoTratamento = codigoTratamento;
	}

	public Especialidade getEspecialidade() {
		return especialidade;
	}

	public void setEspecialidade(Especialidade especialidade) {
		this.especialidade = especialidade;
	}

	public Integer getIdEspecialidade() {
		return idEspecialidade;
	}

	public void setIdEspecialidade(Integer idEspecialidade) {
		this.idEspecialidade = idEspecialidade;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	public Integer getIdConvenio() {
		return idConvenio;
	}

	public void setIdConvenio(Integer idConvenio) {
		this.idConvenio = idConvenio;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

}
